package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Asistencia;
import jschool.entidades.Estudiante;
import jschool.persistencia.Conexion;

public class ManejadorDeAsistencia {
	private ArrayList<Asistencia> asistencias = null;
	private static ManejadorDeAsistencia instancia = null;
	private Conexion conexion;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;
	private ArrayList<Estudiante> estudiantes = null;

	private ManejadorDeAsistencia() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeAsistencia getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeAsistencia();
		}
		return instancia;
	}

	public ArrayList<Asistencia> getAsistencia() {
		asistencias = new ArrayList<Asistencia>();
		try {
			String sql = "SELECT * FROM Asistencia";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Asistencia asistencia = new Asistencia(rs.getInt(1), rs
						.getString(2), rs.getBoolean(3));
				asistencias.add(asistencia);
			}

		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Asistencia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return asistencias;
	}

	public int agregarAsistencia(Asistencia asistencia) {
		int fila = 0;
		try {
			String sql = "INSERT INTO Asistencia (idEstudiante, dia, estado) VALUES(?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, asistencia.getIdEstudiante());
			stmt.setString(2, asistencia.getDia());
			stmt.setBoolean(3, asistencia.getEstado());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Asistencia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int eliminarAsistencia(int id) {
		int fila = 0;
		try {
			String sql = "DELETE FROM Asistencia WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, id);
			fila = stmt.executeUpdate();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Borrando Asistencia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		}
		return fila;
	}

	public int modificarAsistencia(Asistencia asistencia, int id) {
		int fila = 0;
		try {
			String sql = "UPDATE Asistencia SET idEstudiante = ?, dia = ?, estado = ? WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, asistencia.getIdEstudiante());
			stmt.setString(2, asistencia.getDia());
			stmt.setBoolean(3, asistencia.getEstado());
			stmt.setInt(4, id);
			fila = stmt.executeUpdate();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Asistencia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		}
		return fila;
	}

	public int modificarAsistenciaEstudiante(int idEstudiante, boolean estado) {
		int fila = 0;
		try {
			String sql = "UPDATE Asistencia SET estado = ? WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setBoolean(1, estado);
			stmt.setInt(2, idEstudiante);
			fila = stmt.executeUpdate();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Asistencia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		}
		return fila;
	}

	public ArrayList<Estudiante> getEstudiantePorCurso(int idCurso) {
		estudiantes = new ArrayList<Estudiante>();
		try {
			String sql = "SELECT * FROM Estudiante WHERE idCurso = " + idCurso;
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Estudiante estudiante = new Estudiante(rs.getInt(1), rs
						.getInt(2), rs.getString(3), rs.getString(4), rs
						.getString(5), rs.getString(6), rs.getString(7), rs
						.getString(8), rs.getString(9), rs.getString(10), rs
						.getString(11), rs.getString(12), rs.getString(13), rs
						.getString(14), rs.getString(15), rs.getString(16), rs
						.getString(17), rs.getString(18), rs.getString(19), rs
						.getString(20), rs.getString(21), rs.getInt(22));
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return estudiantes;
	}

}
